#!/bin/bash
export PATH="/sbin:$PATH"
# 日志文件路径
logfile="/var/log/secure"
# 设置最大失败登录尝试次数
declare -r MAX_ATTEMPTS=10

# 使用awk从日志文件中提取IP地址并计数
banned_ips=($(awk '/Failed password for .* from / {ip[$(NF-3)]++} /Failed password for invalid user .* from / {ip[$(NF-1)]++} END {for (i in ip) if (ip[i] > '$MAX_ATTEMPTS') print i}' "$logfile"))

# 校验并禁止 IP 地址
for ip_address in "${banned_ips[@]}"; do
    if [[ $ip_address =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
        if iptables -L -n | grep -q "$ip_address"; then
            echo "$ip_address 已存在"
        else
            echo "禁止 IP 地址 $ip_address。"
            iptables -A INPUT -s "$ip_address" -j DROP
        fi
    else
        echo "跳过无效的 IP 地址: $ip_address"
    fi
done